#pragma warning disable 108
using System;
using System.Runtime.InteropServices;
using System.Collections.Generic;
using Cephei;
using Cephei.Core;
using Cephei.Core.Generic;
using Microsoft.FSharp.Core;
using Cephei.QL.Math;
namespace Cephei.QL.Models.Marketmodels
{
    /// <summary> 
	/// ! this class returns the number of units of the discretely compounding money market account that 1 unit of cash at the payment can buy using the LIBOR rates from current step.  It also returns the derivative of this number with respect to each of the rates.  Discounting is purely based on the simulation LIBOR rates, to get a discounting back to zero you need to multiply by the discount factor of t_0.
	/// </summary>
    [Guid ("EF11ED70-7900-4fb9-8456-ABF2155AE7C2"),ComVisible(true)]
	public interface IMarketModelPathwiseDiscounter 
	{
		///////////////////////////////////////////////////////////////
        // Methods
        //
        /// <summary> 
		/// 
		/// </summary>
		 IMarketModelPathwiseDiscounter GetFactors(Cephei.QL.Math.IMatrix LIBORRates, Cephei.QL.Math.IMatrix Discounts, UInt64 currentStep, Cephei.Core.IVector<Double> factors);
    }   

    /// <summary> 
	/// ! this class returns the number of units of the discretely compounding money market account that 1 unit of cash at the payment can buy using the LIBOR rates from current step.  It also returns the derivative of this number with respect to each of the rates.  Discounting is purely based on the simulation LIBOR rates, to get a discounting back to zero you need to multiply by the discount factor of t_0. Factory
	/// </summary>
   	[ComVisible(true)]
    public interface IMarketModelPathwiseDiscounter_Factory 
    {
        ///////////////////////////////////////////////////////////////
        // Factory methods
        //
        /// <summary> 
		/// 
		/// </summary>
	    IMarketModelPathwiseDiscounter Create (Double paymentTime, Cephei.Core.IVector<Double> rateTimes);
    }
}

